آموزش ساخت بازی سه بعدی به زبان Basic با دارک بیسیک Dark Basic تهیه و آموزش نرم افزار دارک بیسیک |
|||
چهار شنبه 21 فروردين 1392برچسب:, :: 5:17 :: نويسنده : ابوالفضل
دستورات این فصل شامل فرامینی هستند که روند اجرای برنامه را کنترل می کنند . برای نوشتن هر برنامه ای ، یادگیری این دستورات الزامی است . با استفاده از دستورات این فصل می توانیم به سادگی برنامه های سودمندی ایجاد کنیم . دستور Print ( چاپ )
این دستور متن ، عدد ، مقادیر ذخیره شده درون متغیر های عددی و کاراکتری را روی صفحه ی نمایشگر ( Monitor ) چاپ می کند . مانند دستورالعمل زیر :
PRINT PrintStatements
طبق این دستورالعمل ابتدا دستور PRINT را تایپ و بعد از قرار دادین یک فضای خالی ( فشردن دکمه ی Space ) به جای PrintStatements عبارت مورد نظرمان را تایپ می کنیم . مانند مثال زیر :
Print 123
در این مثال عدد 123 چاپ خواهد شد . همانطور که قبلا هم گفتیم ، این دستور توانای چاپ عبارات گوناگون از نوع عدد و کارکتر ، همچنین مقادیر مختلف متغیر ها را نیز دارد . مانند مثال زیر .
intAdad = -12
"strText$ = "Example
Print 34.65
"Print "Hellow Word
Print intAdad
$Print strText
Wait Key
این دستورات را تایپ و اجرا می کنیم ، تا نتیجه را ببینیم . در خط اول متغیر intAdad از نوع Integer ایجاد و مقدار 12- در آن ذخیره شد . در خط دوم متغیر $strText ( توسط نماد $ ) از نوع String ایجاد و عبارت Example چون عدد نیست توسط دو نماد " و " ( به نام کوتیشن ) در آن ذخیره شد . در خط سوم عدد 34.65 چاپ و در خط چارم عبارت Hellow Word چاپ شدند . در خط پنجم مقدار متغیر عددی intAdad و در خط ششم مقدار متغیر کاراکتری $strText که در خطوط یک و دو مقداردهی شده بودند ، چاپ شدند و در خط هفتم بوسیله ی دستور Wait Key مفسر DarkBasic منتظر می ماند تا ما دکمه ای را فشار دهیم . به محض فشار دادن هر دکمه از کیبورد ، برنامه تمام می شود .
با قرار دادن علامت ( ; ) یا ( , ) بین چند عبارت و یا متغیر می توانیم تمامی آنها را با هم در یک سطر چاپ کنیم . مانند مثال زیر :
"myName$ = "Hamid Reza
myAge = 20
"Print "My Name Is " ; myName$ ; " And My Age Is " , myAge , " Year
Wait Key
با اجرای این مثال خواهیم دید که تمامی عبارات و متغیر ها در کنار هم چاپ می شوند .
توجه ! بدلیل اینکه طول برخی از خطوط برنامه آن قدر بلند است که در عرض کتاب جا نمی شود ، بعد از این برای اینکه بتوانیم تمامی دستورات نوشته شده در یک خط از برنامه را در این کتاب نمایش دهیم ، ما ادامه ی آن خط را در خط بعدی اش چاپ و زیر تمامی آنها خط تیره می کشیم تا معلوم شود که خطوط خط دار نوشته شده در این کتاب ، متعلق به یک خط در برنامه ی DarkBasic می باشد . یعنی خطوط برنامه ی بالا در کامپیوتر بصورت زیر بوده است .
"myName$ = "Hamid Reza
myAge = 20
"Print "My Name Is " ; myName$ ; " And My Age Is " , myAge , " Year
Wait Key
همانطور که می بینید خط سوم این برنامه همان خطوط سوم و چهارم مثال پیشین است .
دستور SET CURSOR
با استفاده از دستور Print هر عبارتی را چاپ می کردیم . منتهی عبارات به ترتیب از بالا به پائین و از چپ به راست چاپ می شدند . با استفاده از این دستور می توانیم قبل از چاپ عبارات ، مختصاتی را بر روی صفحه چاپ مشخص کنیم تا عبارت در آن مختصات ( موقعت مکانی در صفحه نمایشگر ) چاپ شوند . مانند دستورالعمل زیر :
Set Cursor X,Y
طبق این دستورالعمل ابتدا عبارت Set Cursor و بعد به جای X مختصات افقی ( مقدار فاصله ی عبارت از قسمت چپ صفحه ی نمایشگر ) و به جای Y مختصات عمودی ( مقدار فاصله ی عبارت از قسمت بالای صفحه ی نمایشگر ) را قرا می دهیم مانند مثال زیر :
Set Cursor 40,50
"Print "Hello
Wait Key
در این مثال کرسر به مقدار 40 پیکسل از سمت چپ صفحه به سمت راست و به مقدار 50 پیکسل از سمت بالای صفحه به پایین حرکت کرد و در موقعیت ( 50 و 40 ) قرار گرفت و عبارت Hello توسط دستور Print در همان موقعیت چاپ شد . برای فهم بیشتر به شکل زیر نگاه کنید :
در این شکل یک شبکه ی فرضی را می بینیم که قسمت کوچکی از مختصات طولی و عرضی صفحه ی نمایش را نشان می دهد . در این مختصات برای مثال دو نقطه در نظر گرفته شده . یکی در بالا و سمت چپ که مختصات آن ( 0 و 0 ) است و دیگری کمی پایین تر و سمت راست که مختصات آن ( 2 و 6 ) می باشد . یعنی به مقدار 6 واحد از مختصات X به سمت راست و به مقدار 2 واحد از مختصات Y به سمت پایین حرکت کرده و هم اکنون در موقعت ( 2 و 6 ) قرار دارد .
دستورات زیر را در نظر بگیرید :
Set Cursor 350,100 "Print "H Wait Key
با اجرای این مثال عبارت H در موقعیت 350 و 100 چاپ می شود . یعنی اگر عبارت H را داخل یک مربع در نظر بگیریم ، گوشه ی بالا و سمت چپ آن مربع دقیقا بر روی موقعیت Y = 100 و X = 350 منطبق می شود . مانند شکل زیر :
در این مثال عبارت H در مختصات 100 و 350 چاپ شد . بیشترین اعدادی که برای تعیین مختصات X و Y مشخص می کنیم بستگی به تنظیمات پروژه دارد .
دستور INPUT
از این دستور برای گرفتن ورودی ( عدد یا عبارت متنی ) از کاربر ( فردی که بازی می کند ) در حین اجرای برنامه ( بازی ) استفاده می کنیم . یعنی در حین اجرای برنامه می توانیم عدد و یا هر عبارتی را توسط کیبورد ، داخل متغیر ها ذخیره کنیم . مانند دستورالعمل زیر :
INPUT PrintStatements;InputVariable
طبق این دستورالعمل ابتدا کلمه ی کلیدی INPUT را تایپ و سپس به جای PrintStatements توضیحاتی راجع به ورودی بصورت متن ، و یا متغیر کاراتری ( String ) قرار می دهیم و بعد از علامت ( ; ) به جای InputVariable نام متغیر را تایپ می کنیم . نوع متغیر انتخاب شده بستگی به نیازمان دارد . اگر به عدد نیاز داشتیم متغیری از نوع عدد و اگر عبارت مورد نیازمان بود ، متغیری از نوع کاراکتر ( String ) قرار می دهیم . مانند مثال زیر :
$INPUT "enter your name ?";name
$PRINT "your name is ";name
WAIT KEY
با اجرای این مثال ابتدا عبارت ? enter your name چاپ شده و ما می توانیم نامی را تایپ کنیم . بعد از زدن دکمه ی Enter عبارت تایپ شده در متغیر $name ذخیره خواهد شد و در خط دوم ، عبارت your name is همراه با مقدار ذخیره شده در متغیر $name چاپ خواهد شد .
قرار دادن عبارت در دستور Input اختیاری است . یعنی می توان از دستور Input بصورت زیر استفاده کرد .
Input MyNumber
در این مثال یک عدد از کاربر گرفته می شود و در متغیر MyNumber ذخیره خواهد شد .
دستور CLS
با استفاده از این دستور می توان صفحه ی نمایشگر را از متون نوشته شده ی قبلی پاک کرد . یعنی هر آنچه که از قبل در صفحه ی نمایشگر چاپ شده بود ، پاک می شود . مانند مثال زیر :
"Print "Hello
"Print "World
Cls
"Print "DarkBasic
Wait Key
با اجرای این مثال عبارات چاپ شده قبل از دستور Cls ، یعنی Hello و World پاک شده ، و بعد عبارت DarkBasic چاپ خواهد شد .
دستور REM
با استفاده از این دستور ، می توانیم توضیحاتی داخل خطوط برنامه ، یادداشت کنیم . مفسر DarkBasic توضیحات نوشته شده بعد از این دستور ( در همان خط ) را نادیده می گیرد و بی تفاوت از آن عبور می کند . مانند دستورالعمل زیر :
Rem Comments
طبق این دستورالعمل به جای Comments ، عبارت مورد نظرمان را می نویسیم . DarkBasic هر عبارتی را که بعد از دستور Rem نوشته شده باشد را ، نادیده گرفته و از آن عبور می کند . ما می توانیم بهر تعدادی که نیاز داشته باشیم ، از این دستور در خطوط برنامه استفاده کنیم . مانند مثال زیر :
.Rem This is a comment that doesn't do anything
"Print "Hello
Wait Key
با اجرای این مثال خواهیم دید که تنها نوشته ی ( Hello ) چاپ شد و خط اول بی تاثیر می ماند .
توجه ! دستور Rem مزایای فراوانی دارد . ما می توانیم برای غیر فعال کردن یک یا چند خط از برنامه ، بطور موقت ، این دستور را ابتدای آن خطوط تایپ و یا به جای کلمه ی Rem از علامت ( ` ) هم می توانیم استفاده کنیم ( همان دکمه ای که علامت ~ هم روی آن است ) . مانند مثال زیر :
"Print "Hello`
"Print "Word
Wait Key
با اجرای این مثال تنها خطوط دوم و سوم اجرا خواهند شد .
دستور REMSTART و REMEND
در برخی مواقع نیاز داریم ، تعدادی از خطوط برنامه را ( که پشت سر هم هستند ) غیر فعال کنیم . تا مفسر DarkBasic آن ها را نادیده گرفته و از آن ها عبور کند . مثلا می خواهیم توضیحاتی راجع به برنامه ، در ابتدای خطوط متن برنامه یادداشت کنیم ( مثلا ده خط پشت سر هم ) . برای این کار از دستور RemStart برای شروع و RemEnd برای اتمام غیرفعال سازی خطوط پشت سر هم در برنامه ، استفاده می کنیم . مانند مثال زیر :
REMSTART
----------------------------------------------
Author : Hamid Reza Heidary
Date : April 3 , 2009
.Description : Demonstrates the use of comments
REMEND
"Print "Test
Wait key
با اجرای این مثال می بینیم که فقط کلمه ی Test چاپ شد و اتفاق دیگری نیفتاد . یعنی خطوط نوشته شده بین دستور REMSTART و REMEND نادیده گرفته شدند . اگر بخواهیم تعداد زیادی از خطوط را غیر فعال کنیم ، استفاده از این دو دستور راحت تر است از اینکه بخواهیم برای هر خط ، از دستور Rem استفاده کنیم .
دستور END
این دستور برنامه را می بندد ( یعنی با این دستور از برنامه خارج می شویم ) . ما می توانیم در هر خطی از برنامه از این دستور استفاده کنیم . منتها باید بدانیم که چه موقعی می خواهیم از برنامه خارج شویم . مانند مثال زیر :
Rem Start Of Program
"Print "One
Wait Key
End
"Print "Two
Wait Key
با اجرای این مثال کلمه ی One برروی صفحه ی مانیتور چاپ خواهد شد . مفسر DarkBasic بر روی دستور Wait Key می ایستد و منتظر می ماند تا کلیدی را فشار دهیم . بعد از فشار دادن یکی از دکمه های کیبورد از برنامه خارج می شویم زیرا با زدن یکی از کلید ها مفسر DarkBasic به خط بعد از فرمان Wait Key مراجعه می کند و با اجرای دستور End از برنامه خارج می شویم و بقیه ی برنامه بدون اجرا رها خواهد شد .
نکته ! مفسر DarkBasic به بزرگی و کوچکی حروف نوشته شده ی دستورات حساس نمی باشد . یعنی می توانیم ، دستور End را بصورت های END ، end ، EnD ، eNd و ... هم تایپ کنیم .
دستور GOTO
در حالت عادی ، مفسر DarkBasic برنامه را خط به خط از بالا به پائین اجرا می کند . با استفاده از این دستور می توانیم مفسر DarkBasic را به خط مورد نظرمان بفرستیم . تنها کافی است یک برچسب در آن خط مورد نظر ایجاد ، سپس از دستور Goto برای پرش به آن خط ، استفاده می کنیم . مانند مثال زیر :
:MyLabel
"PRINT "Hello World
GOTO MyLabel
با اجرای این مثال می بینیم که عبارت Hello World دائما در حال چاپ شدن است . دلیل آن این است که در خط اول برچسبی ( برای مثال ) با نام MyLabel ایجاد کردیم و بعد از آن علامت ( : ) را قرار دادیم . زمانی که مفسر DarkBasic به دستور Goto می رسد ، عبارت نوشته شده ی ( برای مثالMyLabel ) جلوی دستور Goto را می خواند و به دنبال خطی با همان عبارت ( برچسب با عنوان :MyLabel ) می گردد . سپس به آن خط پرش می کند و برنامه را از آنجا ادامه می دهد . علامت ( : ) بعد از نام برچسب باید تایپ شود .
دستور GOSUB
عملکرد دستور Gosub شباهت زیادی با دستور Goto دارد . با این تفاوات که دستور Gosub بلوک خاصی از برنامه را اجرا می کند و سپس به همان خطی که آن را ترک کرده بود باز می گردد . مانند مثال زیر :
"PRINT "Hello
GOSUB MySubroutine
Wait Key
END
:MySubroutine
"PRINT "World
RETURN
در مثال بالا ، در خط ششم یک برچسب با نام MySubroutine توسط علامت ( : ) ایجاد کردیم . با اجرای این مثال ابتدا عبارت Hello چاپ می شود . سپس دستور Gosub با توجه به عبارت نوشته شده ی جلوی خود ( یعنی عبارت MySubroutine ) به برچسبی با همین عنوان ( :MySubroutine ) یعنی به خط هفتم جهش می کند . سپس دستورات بعدی را اجرا می کند . یعنی عبارت World را چاپ می کند و زمانی که به دستور RETURN نوشته شده در خط هشتم می رسد ، دوباره به مکان ترک شده ( یعنی به خط دوم ) برمی گردد . یعنی دستور خط سوم به بعد را اجرا می کند . ما می توانیم بین خط :MySubroutine و دستور RETURN هر تعداد دستوری را که نیاز داشته باشیم ، اضافه کنیم تا همگی اجرا شوند .
دستور DO … LOOP
در واقع این دستور به دو دستور Do و Loop تقسیم می شود که جزء دستورات حلقه ای محسوب می شوند . به مثال زیر دقت کنید تا بعد از آن به توضیح دستور Do … Loop بپردازیم .
:Label7
"PRINT "Hello World
GOTO Label7
در این مثال عبارت Hello World دائما چاپ می شود . یعنی مفسر DarkBasic در خط سوم توسط دستور Goto به خط اول پرش می کند و عبارت Hello World مجددا چاپ می شود و این کار تا ابد ادامه دارد . یعنی اجرای دستورات نوشته شده بین خطوط یکم و سوم دائما تکرار می شوند . می توان به جای ایجاد این برچسب ( یعنی :Label7 ) و استفاده از دستور Goto از دستور Do … Loop استفاده کنیم مانند مثال زیر :
Do
"PRINT "Hello World
Loop
با اجرای این مثال ، دستورات نوشته شده بین دو دستور Do و Loop دائما در حال اجرا شدن می باشند . یعنی عبارت Hello World دائما در حال چاپ شدن خواهد بود . ما می توانیم به جای دستور Print تعداد زیادی دستور بین Do و Loop قرار دهیم تا دائما اجرا شوند .
دستور EXIT
این دستور در واقع جزئی از دستور Do … Loop است که می توان بنا به ضرورت از آن استفاده کرد . وظیفه ی این دستور خروج از حلقه ی Do … Loop می باشد . مانند مثال زیر :
A = 1
Do
A = A + 1
Print A
If A >= 10000 Then Exit
Loop
با اجرای این مثال زمانی که متغیر A به 10000 می رسد ، برنامه توسط دستور Exit از حلقه ی Do … Loop خارج شده و چون از دستور Wait Key استفاده نکردیم ، کامپایلر رها شده و از برنامه خارج خواهیم شد .
دستور FOR … NEXT
در دستور پیشین ( Do … Loop ) دستورات نوشته شده بین Do و Loop دائما در حال اجرا شدن بودند . ولی اگر بخواهیم این دستورات به تعداد معینی تکرار شوند ، از دستور For … Next استفاده می کنیم . مانند دستورالعمل زیر :
For Counter = StartValue To EndValue Step StepValue
Next Counter
طبق این دستورالعمل به جای Counter یک متغیر قرار می دهیم . دستور For متغیر Counter را از شماره ی StartValue تا EndValue می شمارد و هر بار به اندازه ی StepValue به مقدار Counter اضافه می کند و دستور Next انتهای حلقه را مشخص می کند . یعنی ما می توانیم دستورات مورد نظرمان را بین این دو خط تایپ کنیم . مانند مثال زیر :
I As Integer
For I = 1 To 7 Step 2
Print I
Next I
Wait Key
با اجرای این مثال متغیر I از 1 تا 7 بین خطوط دوم و پنجم شمرده می شود و هر بار توسط دستور Step به مقدار 2 عدد به متغیر I اضافه می شود . هر بار متغیر مقدار دهی شده ی I ، توسط دستور Print چاپ می شود .
اگر در هر شمارش بخواهیم تنها یک عدد به متغیرمان اضافه شود ، می توانیم Step StepValue را ننویسیم . یعنی اگر بخواهیم اعداد 5- تا 5 را چاپ کنیم ، مانند مثال زیر عمل می کنیم .
For intValue = -5 To 5
Print intValue
Next intValue
Wait Key
دستور For … Next می تواند متغیر ها را بصورت معکوس هم بشمارد مانند زیر :
For k = 10 To -2 Step -2
Print k
Next K
Wait Key
دستور REPEAT … UNTIL
این دستور یکی دیگر از دستورات حلقه ای DarkBASIC می باشد . با این تفاوت که دستورات نوشته شده بین Repeat و Until دائما تکرار می شوند ، تا اینکه شرط نوشته شده روبروی دستور Until منطقی شود . یعنی تا زمانی که شرط منتقی نباشد ، دستورات بین Repeat و Until دائما اجرا خواهند شد . مانند مثال زیر :
myNumber = 0
REPEAT
myNumber = myNumber + 1
"... PRINT "Please Wait
UNTIL myNumber = 3000
با اجرای این مثال دستور نوشته شده بین دستور REPEAT و UNTIL یعنی خطوط سوم تا چهارم دائما اجرا میشوند تا زمانی که شرط نوشته شده روبروی دستور UNTIL درست و منطقی باشد . یعنی در این مثال اگر myNumber برابر 3000 شود ، DarkBasic از حلقه خارج می شود .
می توانیم روبروی دستور UNTIL به جای یک شرط از چندین شرط هم استفاده کنیم ، مانند مثال زیر :
A = 0
Repeat
print "a = ";a;" b = ";b
a = a + 1
b = 1000
Until a > 3000 And b = 1000
دستور WHILE … ENDWHILE
این دستور شباهت زیادی با دستور گذشته ( Repeat … Until ) دارد . با این تفاوت که در دستور گذشته دستورات مابین Repeat و Until تا زمانی اجرا می شوند که شرط روبروی Until درست نباشد . ولی در این دستور فرامین بین دستورات While … EndWhile تا زمانی اجرا می شوند که شرط نوشته شده روبروی While منطقی باشد . مانند مثال زیر :
A = 0
While A < 4000
PRINT A
A = A + 1
EndWhile
با اجرای این مثال فرامین نوشته شده بین خطوط دوم و پنجم تا زمانی اجرا می شوند که شرط نوشته شده روبروی While درست باشد ، یعنی تا زمانی که A < 4000 باشد ، فرامین اجرا خواهند شد . بعد از آن DarkBasic حلقه را رها و به اجرای دستورات نوشته شده بعد از آن می پردازد .
نظرات شما عزیزان:
موضوعات آخرین مطالب آرشيو وبلاگ پیوندهای روزانه پيوندها
تبادل
لینک هوشمند
نويسندگان |
|||
|